// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Title Card Object
// Script Author: Christian Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

// Aliases
private alias object.value0 : object.timer
private alias object.value6 : object.displayedActNo

private alias 0 : CUTSCENE_NONE
private alias 1 : CUTSCENE_MIDZONE
private alias 2 : CUTSCENE_ENDZONE
private alias 666 : GROUP_CUTSCENES

// Static Values
public value TitleCard_value23 = 0;

// Player Aliases
private alias object.controlMode : player.controlMode
private alias object.jumpPress 	 : player.jumpPress
private alias object.jumpHold 	 : player.jumpHold
private alias object.up 		 : player.up
private alias object.down 		 : player.down
private alias object.left 		 : player.left
private alias object.right 		 : player.right
private alias object.value1 	 : player.timer

// Determines whether the act results will say got through zone or got through act [num]
private alias TitleCard_value23 : TitleCard_showZoneText

event ObjectMain

	options.touchControls = false

	if options.gamemode == 1
		player[currentPlayer].controlMode = -1
	end if
	
	switch object.state
	case 0
		stage.pauseEnabled = 0
		object.frame = 62
		object.alpha  = 0
		object.value1 = -720
		object.value2 -= 720
		object.value4 = 432
		object.value5 = -432
		object.value7 = 434
		object.value8 = 650
		object.value10 = -432
		switch object.propertyValue
		case 0
			object.displayedActNo = stage.actNum
			TitleCard_showZoneText = false
			break
		case 1
			object.displayedActNo 	= 1
			TitleCard_showZoneText 	= false
			break
		case 2
			object.displayedActNo 	= 2
			TitleCard_showZoneText 	= false
			break
		case 3
			object.displayedActNo 	= 3
			TitleCard_showZoneText 	= false
			break
		default
			TitleCard_showZoneText = true
			break
		end switch

		if ta.restarting == 1
			PlayMusic(0)
			object.state = 7
			object.timer = 272
			stage.state = STAGE_RUNNING
			SetScreenFade(0, 0, 0, 255)
			ta.restarting = 0
		else
			TA.quickstart = 0
			if options.gameMode == 0
				if cutscene.mode != CUTSCENE_NONE
					stage.state = STAGE_RUNNING
				else
					stage.state = STAGE_PAUSED
					object.state++
				endif
			else
				stage.state = STAGE_PAUSED
				object.state++
			endif
		end if
		break

	case 1
		if object.timer < 30
			object.timer++
		else
				object.timer = 0
				PlayMusic(0)
				object.state++
		end if
		break

	case 2
		if options.vsMode == true
			CallNativeFunction2(SendEntity, object.entityPos, 0)
		end if

		if object.value3 < 240
			object.value3 += 16
		end if

		if object.value4 > 0
			object.value4 -= 16
			object.value5 += 16
		end if

		if object.value4 > 224
			object.value7 -= 16
		end if

		if object.value8 > 130
			object.value8 -= 16
		else
			object.state++
		end if

		if object.value1 < -200
			object.value1 += 16
			object.value2 += 16
		end if

		if object.alpha < 100
			object.alpha += 5
		end if
		break

	case 3
		if object.value10 < 0
			object.value10 += 16
		end if

		if object.timer < 110
			object.timer++
		else
			object.timer = 0
			object.state ++
		end if
		break

	case 4
		if object.value5 > -170
			object.value5 -= 32
			object.value7 += 32
		else
			if object.value4 < 424
				object.value4 += 32
			else
				stage.state = STAGE_RUNNING
				currentPlayer = 0
				while currentPlayer < playerCount
					player[currentPlayer].controlMode = -1
					player[currentPlayer].up 		= false
					player[currentPlayer].down 		= false
					player[currentPlayer].left 		= false
					player[currentPlayer].right 	= false
					player[currentPlayer].jumpPress = false
					player[currentPlayer].jumpHold 	= false
					player[currentPlayer].timer 	= 0
					currentPlayer++
				loop
				object.state++
			end if
		end if
		break

	case 5
		object.priority = PRIORITY_ACTIVE
		if object.value3 > 0
			object.value3 -= 32
		else
			currentPlayer = 0
			while currentPlayer < playerCount
				if options.gamemode == 1
					player[currentPlayer].controlMode = -1
				else
					player[currentPlayer].controlMode = 0
				end if
				currentPlayer++
			loop
			object.state++
		end if
		break

	case 6
		if object.timer < 48
			object.timer++
		else
			object.timer = 0
			if options.gamemode != 1
				if stage.actNum != 3
					stage.timeEnabled = true
					cutscene.mode = CUTSCENE_NONE
				end if
			endif
			object.state = 9
		end if
		break

	case 7
		if object.timer > 0
			object.timer -= 16
			SetScreenFade(0, 0, 0, object.timer)
		else
			currentPlayer = 0
			while currentPlayer < playerCount
				if options.gamemode == 1
					player[currentPlayer].controlMode = -1
				else
					player[currentPlayer].controlMode = 0
				end if
				currentPlayer++
			loop
			ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)
		end if
		break

	case 8
		if object.timer < 300
			object.timer += 5
			if credits.screen == 0
				music.volume -= 2
			end if
		else
			stage.activeList = PRESENTATION_STAGE
			if credits.screen > 0
				stage.listPos = 2
			else
				stage.listPos = 0
				StopMusic()
			end if
			LoadStage()
		end if
		SetScreenFade(0, 0, 0, object.timer)
		break

	case 9
		if object.propertyValue != 3
			HUD.hidden = 0
		end if
		stage.pauseEnabled = 1
		object.value1 -= 32
		object.value2 -= 32
		object.value8 += 32
		if object.timer < 5
			object.timer++
		else
			object.timer = 0
			object.type = TypeName[Blank Object]
		end if
		break

	end switch
end event


event ObjectDraw
	Object.inkEffect = INK_ALPHA	
	temp2 = screen.xcenter
	temp2 -= 160
	temp2 >>= 1
	
	switch object.state
	case 0
	case 1
	case 2
	case 3
		//object.value3 moves BG
		//object.value4 moves PLAYER
		//object.value5 moves ARROWS L
		//object.value7 moves ARROWS R
		SetActivePalette(0, 0, screen.ysize)
		if cutscene.mode != CUTSCENE_MIDZONE
			DrawRect(0, 0, screen.xsize, object.value3, 0, 0, 0, 255)
			DrawRect(0, object.value3, screen.xsize, screen.ysize, 0, 0, 0, 255)
		endif
		if options.vsMode == true
			if object.state == 1
				DrawSpriteScreenXY(32, screen.xsize, screen.ysize)
			end if
		end if

		temp0 = object.value10
		FlipSign(temp0)
		if object.propertyValue != 0
			DrawSpriteScreenXY(56, temp0, 8)
			temp0 += 65
			if object.propertyValue < 3
				if object.propertyValue == 2
					DrawSpriteScreenXY(73, temp0, 30)
				else
					CheckCurrentStageFolder("SSZ")
					if checkResult == 1
						DrawSpriteScreenXY(72, temp0, 30)
					end if
				end if
			end if
			temp0 += 25
			if object.propertyValue < 2
				DrawSpriteScreenXY(73, temp0, 30)
			end if
		end if

		temp0 -= 27
		switch object.propertyValue
		case 1
			DrawSpriteScreenXY(58, temp0, 15)
			CheckCurrentStageFolder("SSZ")
			if checkResult == 1
				temp0 -= 50
				DrawSpriteScreenXY(69, temp0, 20)
			end if
			break
		case 2
			DrawSpriteScreenXY(59, temp0, 15)
			CheckCurrentStageFolder("SSZ")
			if checkResult == 1
				temp0 -= 45
				DrawSpriteScreenXY(70, temp0, 15)
			end if
			break
		case 3
			DrawSpriteScreenXY(60, temp0, 15)
			temp0 -= 57
			DrawSpriteScreenXY(71, temp0, 22)
			break
		case 4
			DrawSpriteScreenXY(61, temp0, 15)
			break
		default
			break
		end switch

		temp0 = object.value10
		temp0 += 365
		temp1 = 199
		object.value9 ++
		if object.value9 > 2
			object.frame ++
			if object.frame > 67
				object.frame = 62
			endif
			object.value9 = 0
		end if
		object.alpha += 255
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 255

		object.alpha += 100
		temp0 -= 15
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 100

		object.alpha += 50
		temp0 -= 15
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 50

		object.alpha += 25
		temp0 -= 15
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 25

		DrawSpriteScreenFX(54, FX_INK, screen.xcenter, screen.ycenter)
		temp0=screen.ysize	
		temp0 += 70
		DrawSpriteScreenXY(52, object.value5, screen.xsize)
		DrawSpriteScreenXY(53, object.value7, temp0)
		temp0 = screen.ycenter
		temp0 += temp2
		temp0 += 128
		temp0 += object.value1
		temp1 = screen.xcenter
		temp1 += 130
		DrawActName(0, temp1, temp0, 0, 0, 16, -2)
		temp0 = screen.ycenter
		temp0 -= temp2
		temp0 -= 128
		temp0 += object.value8
		temp1 -= 245
		temp0 += 40
		DrawActName(0, temp1, temp0, 2, 0, 16, -2)
		temp0 = screen.xcenter
		temp0 += temp2
		temp0 += 15
		temp0 += object.value2

		if options.expertmode == 1
			DrawSpriteScreenXY(55, temp1, temp0)
		end if
		break

	case 4
	case 5
		SetActivePalette(0, 0, screen.ysize)
		if cutscene.mode != CUTSCENE_MIDZONE
			DrawRect(0, 0, screen.xsize, object.value3, 0,0,0, 255)
		
			temp4 = screen.xsize
			temp4 -= 5
			while temp4 > -26
				DrawSpriteScreenXY(68, temp4, object.value3)
				temp4 -= 78
				DrawSpriteScreenXY(68, temp4, object.value3)
			loop
		endif

		temp0=screen.ysize	
		temp0 += 70
		DrawSpriteScreenXY(52, object.value5, screen.xsize)
		temp3 = object.value3
		temp3 -= 120
		DrawSpriteScreenFX(54, FX_INK, screen.xcenter, temp3)
		DrawSpriteScreenXY(53, object.value7, temp0)
		temp0 = screen.ycenter
		temp0 += temp2
		temp0 += 128
		temp0 += object.value1
		temp1 = screen.xcenter
		temp1 += 130
		DrawActName(0, temp1, temp0, 0, 0, 16, -2)
		temp0 = screen.ycenter
		temp0 -= temp2
		temp0 -= 128
		temp0 += object.value8
		temp1 -= 245
		temp0 += 40
		DrawActName(0, temp1, temp0, 2, 0, 16, -2)
		temp0 = screen.xcenter
		temp0 += temp2
		temp0 += 15
		temp0 += object.value2
		if options.expertmode == 1
			DrawSpriteScreenXY(55, temp1, temp0)
		end if
		temp0 = screen.xcenter
		temp0 += temp2
		temp0 -= 40
		temp0 += object.value2
		temp0 = object.value5
		if object.propertyValue != 0
			DrawSpriteScreenXY(56, temp0, 8)
			temp0 += 65
			if object.propertyValue < 3
				if object.propertyValue == 2
					DrawSpriteScreenXY(73, temp0, 30)
				else
					CheckCurrentStageFolder("SSZ")
					if checkResult == 1
						DrawSpriteScreenXY(72, temp0, 30)
					end if
				end if
			end if
			temp0 += 25
			if object.propertyValue < 2
				DrawSpriteScreenXY(73, temp0, 30)
			end if
		end if
		temp0 -= 27
		switch object.propertyValue
		case 1
			DrawSpriteScreenXY(58, temp0, 15)
			CheckCurrentStageFolder("SSZ")
			if checkResult == 1
				temp0 -= 50
				DrawSpriteScreenXY(69, temp0, 20)
			end if
			break
		case 2
			DrawSpriteScreenXY(59, temp0, 15)
			CheckCurrentStageFolder("SSZ")
			if checkResult == 1
				temp0 -= 45
				DrawSpriteScreenXY(70, temp0, 15)
			end if
			break
		case 3
			DrawSpriteScreenXY(60, temp0, 15)
			temp0 -= 57
			DrawSpriteScreenXY(71, temp0, 22)
			break
		case 4
			DrawSpriteScreenXY(61, temp0, 15)
			break
		default
			break
		end switch
		
		temp0 = 0
		temp0 -= object.value5
		temp0 += 365
		temp1 = 199
		object.value9 ++
		if object.value9 > 2
			object.frame ++
			if object.frame > 67
				object.frame = 62
			endif
			object.value9 = 0
		end if
		object.alpha += 255
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 255

		object.alpha += 100
		temp0 -= 15
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 100

		object.alpha += 50
		temp0 -= 15
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 50

		object.alpha += 25
		temp0 -= 15
		DrawSpriteScreenFX(object.frame, FX_INK, temp0, temp1)
		object.alpha -= 25
		break

	case 6
	case 9
		SetActivePalette(0, 0, screen.ysize)
		temp0 = screen.ycenter
		temp0 += temp2
		temp0 += 128
		temp0 += object.value1
		temp1 = screen.xcenter
		temp1 += 130
		DrawActName(0, temp1, temp0, 0, 0, 16, -2)
		temp0 = screen.ycenter
		temp0 -= temp2
		temp0 -= 128
		temp0 += object.value8
		temp1 -= 245
		temp0 += 40
		DrawActName(0, temp1, temp0, 2, 0, 16, -2)
		temp0 = screen.xcenter
		temp0 += temp2
		temp0 += 15
		temp0 += object.value2
		if options.expertmode == 1
			DrawSpriteScreenXY(55, temp1, temp0)
		end if
		break
		break
	end switch
end event


event ObjectStartup
	if stage.playerlistpos == 0
		LoadSpriteSheet("Global/TitleCard.gif")
	else
		LoadSpriteSheet("Global/TitleCard.gif")
	end if

	// Title card frames
	SpriteFrame(0, 0, 42, 32, 1, 1)			//00	A
	SpriteFrame(0, 0, 43, 32, 44, 1)		//01	B
	SpriteFrame(0, 0, 40, 32, 88, 1) 		//02	C
	SpriteFrame(0, 0, 43, 32, 129, 1)		//03	D
	SpriteFrame(0, 0, 41, 32, 173, 1) 		//04	E
	SpriteFrame(0, 0, 41, 32, 215, 1) 		//05	F
	SpriteFrame(0, 0, 44, 32, 257, 1) 		//06	G
	SpriteFrame(0, 0, 45, 32, 302, 1)		//07	H
	SpriteFrame(0, 0, 23, 32, 348, 1)		//08	I
	SpriteFrame(0, 0, 39, 32, 372, 1) 		//09	J
	SpriteFrame(0, 0, 45, 32, 412, 1) 		//10	K
	SpriteFrame(0, 0, 33, 32, 458, 1)		//11	L
	SpriteFrame(0, 0, 51, 32, 1, 34) 		//12	M
	SpriteFrame(0, 0, 47, 32, 53, 34) 		//13	N
	SpriteFrame(0, 0, 41, 32, 101, 34)		//14	O
	SpriteFrame(0, 0, 43, 32, 143, 34)		//15	P
	SpriteFrame(0, 0, 41, 34, 187, 34)		//16	Q
	SpriteFrame(0, 0, 44, 32, 229, 34)		//17	R
	SpriteFrame(0, 0, 45, 32, 274, 34) 		//18	S
	SpriteFrame(0, 0, 34, 32, 320, 34) 		//19	T
	SpriteFrame(0, 0, 44, 32, 355, 34) 		//20	U
	SpriteFrame(0, 0, 38, 32, 400, 34)		//21	V
	SpriteFrame(0, 0, 51, 32, 439, 34) 		//22	W
	SpriteFrame(0, 0, 49, 32, 1, 67) 		//23	X
	SpriteFrame(0, 0, 37, 32, 51, 67)		//24	Y
	SpriteFrame(0, 0, 44, 32, 89, 67) 		//25	Z

	SpriteFrame(0, 0, 24, 15, 1, 100)		//26	a
	SpriteFrame(0, -5, 24, 20, 27, 100)		//27	b
	SpriteFrame(0, 0, 21, 15, 52, 100)		//28	c
	SpriteFrame(0, -5, 25, 20, 74, 100)		//29	d
	SpriteFrame(0, 0, 23, 15, 100, 100)		//30	e
	SpriteFrame(0, -10, 20, 25, 124, 100)		//31	f
	SpriteFrame(0, 0, 24, 20, 145, 100)		//32	g
	SpriteFrame(0, -5, 23, 20, 170, 100)		//33	h
	SpriteFrame(0, -5, 16, 20, 194, 100)		//34	i
	SpriteFrame(0, -5, 18, 25, 211, 100)		//35	j
	SpriteFrame(0, -5, 22, 20, 230, 100)		//36	k
	SpriteFrame(0, -5, 16, 20, 253, 100)		//37	l
	SpriteFrame(0, 0, 32, 15, 270, 100)		//38	m
	SpriteFrame(0, 0, 24, 15, 303, 100)		//39	n
	SpriteFrame(0, 0, 22, 15, 328, 100)		//40	o
	SpriteFrame(0, 0, 25, 20, 351, 100)		//41	p
	SpriteFrame(0, 0, 25, 20, 377, 100)		//42	q
	SpriteFrame(0, 0, 19, 15, 403, 100)		//43	r
	SpriteFrame(0, 0, 22, 15, 423, 100)		//44	s
	SpriteFrame(0, -5, 16, 20, 446, 100)		//45	t
	SpriteFrame(0, 0, 25, 15, 463, 100)		//46	u
	SpriteFrame(0, 0, 21, 15, 489, 100)		//47	v
	SpriteFrame(0, 0, 28, 15, 1, 121)		//48	w
	SpriteFrame(0, 0, 27, 15, 30, 121)		//49	x
	SpriteFrame(0, 0, 24, 20, 58, 121)		//50	y
	SpriteFrame(0, 0, 23, 15, 83, 121)		//51	z

	SpriteFrame(0, -310, 213, 134, 1, 291)		//52	Layers Blue
	SpriteFrame(-27, -310, 213, 135, 215, 291)	//53	Layers Blue RIght
	SpriteFrame(-75, -70, 166, 146, 1, 143)	//54	BG Blue

	SpriteFrame(0, 0, 139, 12, 337, 251)		//55	Expert Mode
	SpriteFrame(0, 0, 107, 62, 405, 121)		//56	Big Circle
	SpriteFrame(0, 0, 22, 22, 198, 72)		//57	Small Circle
	
	SpriteFrame(0, 0, 31, 9, 134, 67)		//58 1
	SpriteFrame(-2, 0, 34, 9, 134, 77)		//59 2
	SpriteFrame(-4, 0, 39, 9, 134, 87)		//60 BOSS
	SpriteFrame(2, 0, 23, 9, 174, 87)		//61 ???

	SpriteFrame(0, -3, 40, 42, 168, 145)		//62 Sonic 1
	SpriteFrame(-4, -3, 45, 42, 210, 145)		//63 Sonic 2
	SpriteFrame(2, -3, 40, 42, 256, 145)		//64 Sonic 3
	SpriteFrame(2, -3, 40, 42, 297, 145)		//65 Sonic 4
	SpriteFrame(-3, -1, 45, 42, 168, 189)		//66 Sonic 5
	SpriteFrame(2, -1, 40, 42, 214, 189)		//67 Sonic 6

	SpriteFrame(0, 0, 102, 32, 338, 205)		//68 Triangles

	//Zone Icons
	SpriteFrame(0, 0, 36, 40, 1, 427)		//69	SS1
	SpriteFrame(0, 0, 26, 45, 38, 427)		//70	SS2
	SpriteFrame(0, 0, 49, 34, 65, 427)		//71 BOSS

	//Small Zone Icons
	SpriteFrame(0, 0, 21, 21, 430, 183)		//72	SS2
	SpriteFrame(0, 0, 21, 21, 452, 183)		//73	BOSS

	if vs.playerID == 0
		SpriteFrame(-160, -16, 136, 7, 110, 172)
	else
		SpriteFrame(-160, -16, 136, 7, 110, 164)
	end if

	if options.vsMode == true
		CallNativeFunction2(ReceiveEntity, 0x400, 1)
		ResetObjectEntity(0x400, TypeName[Blank Object], 0, 0, 0)
	end if

	// Cycle through all Title Card objects
	arrayPos0 = 32
	while arrayPos0 < 0x420
		if object[arrayPos0].type == TypeName[Title Card]
			HUD.hidden = 1
			object[arrayPos0].priority 	= PRIORITY_ACTIVE_PAUSED
			object[arrayPos0].alpha 	= 0xFF
			object[arrayPos0].drawOrder = 6
			stage.state = STAGE_PAUSED

			if object[arrayPos0].propertyValue == 5
				CheckCurrentStageFolder("ZoneM")
				if checkResult == false

					// If the object has a property value of 5 & we're in Egg Gauntet, then go back to the title screen
					// (Purpose unknown, IDK why this exists)
					stage.activeList = PRESENTATION_STAGE
					stage.listPos = 0
					LoadStage()

				end if
			end if
		end if

		arrayPos0++
	loop
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
